//
//  HomeViewController.swift
//  weibobo
//
//  Created by 丁超人 on 16/2/21.
//  Copyright © 2016年 丁超人. All rights reserved.
//

import UIKit
// 微博cell 可重用标示符
private let DCStatusCellID = "DCStatusCellID"
class HomeViewController: RootViewController {

    override func viewDidLoad() {
        
        // 设置刷新控件
        setupRefreshControl()
        
        // 调用 rootViewController 的 viewDidLoad  函数 会直接调用loadData
        super.viewDidLoad()
        
        
        //注册科重用 cell
        tableView?.registerClass(UITableViewCell.self, forCellReuseIdentifier: DCStatusCellID)
        
         // 设置访客视图信息 - 如果用登录成功，访客视图为 nil，什么也不做！
        visitorView?.setupInfo(message: "关注一些人，回这里看看有什么惊喜")
        
    }
    
    // 接受到内存警告
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()

    // 在 ios 6.0 之后 默认不在清除 view 
        // 如果视图当前没有显示.会被从内存中销毁，下次需要使用的时候，会再次调用loadView 创建view 
        // 只需要释放能够再次创建的资源，列如：从网络加载的数据数组、
        // 图像的内存管理 SDWebImage 自行管理 ，会释放内存中的图像。下次使用 会重新从磁盘缓存加载，如果磁盘缓存没有，下载图片
        
        // 如果视图当前正在显示 ，window 不为nil
        // 注意：在swift 中lazy 的属性 千万不要设置成 nil
        if self.view.window == nil {
        
            // 1清理数组
            self.dataList.removeAll()
            // 2 刷新数据
            self.loadData()
        
        }
           }
    override func loadData() {
        
        // 默认起始索引值
        let defaultIndex = 100
        
        // 1 判断是否是上拉刷新，如果上拉刷新动画启动，认为是上拉刷新
        let isPullup = refreshControl?.isPullupRefresh ?? false
        // 如果是下拉刷新 显示刷新控件
//        if !isPullup {
        
            // 只会显示菊花，不会触发方法
            refreshControl?.beginRefreshing()
        
//        }
        
        
      // 模拟异步加载数据
        dispatch_async(dispatch_get_global_queue(0,0)) { () -> Void in
            
            
            // 模拟网络延时 sleepForTimeInterval 同步的，不执行完成，不会执行后续代码
            // 阻塞线程。当前线程在睡眠期间，不响应任何时间
            // 提示：商业用用程序千万不要使用
            NSThread.sleepForTimeInterval(1.0)
            
            // 下拉刷新索引，获取数组的第0 条数据数值
            let pulldownIndex = self.dataList.first ?? defaultIndex
            
            // TODO:-上拉刷新索引，获取最后一条记录数值
            let pulluiIndex = self.dataList.last ?? 0
            
            
            // TODO:-如果上拉，顺序加载数据， 如果下拉 倒序
            var arrayM = [Int]()
            if isPullup {
                for i in 0..<10 {
                
                    arrayM.append(pulluiIndex - i - 1)
                    
                }
             
            }else{
                // 模拟网络一次加载的数据
                for i in (0..<10).reverse() {
                    
                    arrayM.append(i + pulldownIndex + 1)
                    
                }
            }
            
            // TODO:- 上啦刷新  将数据追加到数组末尾
            if isPullup {
                
                self.dataList += arrayM
            }else{
                // 下拉刷新要插入到现有的 dataList 的前面
                self.dataList = arrayM + self.dataList
            }
            // 更新UI
            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                
                // 关闭刷新
                self.refreshControl?.endRefreshing()
                // 停止上拉刷新视图的动画
//                self.pullupView.stopAnimating()
                
                
                // 刷新数据
                self.tableView?.reloadData()
                
            })
            
        }
   
 }
    // 私有属性
    private lazy var dataList = [Int]()
    
}
// MARK:-UITableViewDataSource
// 如果父类遵守了协议 子类不用再次遵守协议 否则会报错
extension HomeViewController {


    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return dataList.count
    }
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell = tableView .dequeueReusableCellWithIdentifier(DCStatusCellID, forIndexPath: indexPath)
        
        cell.textLabel?.text = dataList[indexPath.row].description
    
        return cell
    }


}


